#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->timeId = startTimer(100);//0.1s定时器
    ui->lineEdit->installEventFilter(this);//给lineEdit 安装过滤器
}

Widget::~Widget()
{
    delete ui;
}
void Widget::keyPressEvent(QKeyEvent *event){//重写基类的按键按下事件处理器
    // 重写基类的按键按下事件处理器
        switch (event->key()) {
        case Qt::Key_Down: {
            QPoint pos = ui->label->pos(); // 获取label当前位置
            if (pos.y() + 5 < this->height()) { // 检查是否超出窗口高度
                pos.setY(pos.y() + 5); // 修改pos的y坐标
            } else {
                pos.setY(0); // 如果超出，则回到顶部
            }
            ui->label->move(pos); // label移动到新位置
            break;
        }
        case Qt::Key_Up: {
            QPoint pos = ui->label->pos(); // 获取label当前位置
            if (pos.y() - 5 >= 0) { // 检查是否低于窗口顶部
                pos.setY(pos.y() - 5); // 修改pos的y坐标
            } else {
                pos.setY(this->height() - ui->label->height()); // 如果低于顶部，则回到底部
            }
            ui->label->move(pos); // label移动到新位置
            break;
        }
        case Qt::Key_T:{
            killTimer(this->timeId);
            break;//case 一定要break;
        }
        case Qt::Key_R:{
             this->timeId = startTimer(100);//0.1s定时器
            break;
        }
        default:
           Widget::keyPressEvent(event); // 调用基类处理其他按键
            break;
        }
}
void Widget:: mousePressEvent(QMouseEvent *event){//重写鼠标点击事件处理器

    QPoint pos = event->pos();//获取鼠标的位置
    ui->label->move(pos);//移动label到pos位置
}
void Widget:: timerEvent(QTimerEvent *event){
    QPoint pos  = ui->label_2->pos();
    if(pos.x()-5>0){
        pos.setX(pos.x()-5);
    }else{
        pos.setX(this->width());
    }
    ui->label_2->move(pos);
}
//bool Widget:: event(QEvent *event){//重写事件分发器(用重写事件处理器代替事件分发器)
//    switch(event->type()){
//        case QEvent::KeyPress:

////            keyPressEvent();
//            qDebug()<<"keyPressEvent";//按键事件被事件分发器处理掉无法到达事件处理器
//        break;
//        default:
//        break;

//    }
//}
bool Widget:: eventFilter(QObject *watched, QEvent *event){
    if(watched == ui->lineEdit){

        if(event->type() == QEvent::KeyPress)//按键事件
    {
        QKeyEvent *KeyEvent = static_cast<QKeyEvent*>(event);
        if(KeyEvent->key() == Qt::Key_Space)
            ui->lineEdit->clear();
        return true;
    }else
        return false;
    }else{
        return QWidget:: eventFilter(watched,event);//其他事件交给基类过滤器
    }
}
